/* 
 * File:   pessoa.c
 * Author: Vagner Clementino
 *
 * Created on 11 de Março de 2012, 10:46
 */

#include <stdlib.h>
#include <stdio.h>
#include "pessoa.h"


Pessoa* cria_pessoa(char sexo, int id, int* lista_preferencia, int tam_lista){
    
    Pessoa* p = NULL;    
    p = (Pessoa*) malloc(sizeof(Pessoa));
    if(p == NULL){
        /*Erro na alocar o espaço*/
        printf("Erro em alocar memoria para a estrutura Pessoa.\n");
        exit(-4);
    }else{
        p->sexo = sexo;
        p->id = id;
        p->tam_lista_pref = tam_lista;
        p->lista_preferencia = malloc(tam_lista*sizeof(int));
        if(p->lista_preferencia == NULL){
           printf("Erro em alocar memoria para a lista de preferencia.\n");
           exit(-5);
        }
        define_lista_preferencia(&p,lista_preferencia);
        p->conjuge = -1;
        p->ultimo_pretendente = -1;
        return p;
    }    
}

void desaloca_pessoa(Pessoa* p){
    free(p);
}

void define_lista_preferencia(Pessoa** p, int* lista_pref)
{
    int i;
    for(i=0;i<(*p)->tam_lista_pref;i++){
        (*p)->lista_preferencia[i] = lista_pref[i];
    }
}
void imprime_pessoa(const Pessoa* p){
    int i;
    printf("Sexo: %c\n",p->sexo);
    printf("Identificador: %d\n",p->id);
    printf("Lista de preferencia: ");
    for(i = 0; i < p->tam_lista_pref; i++){
        printf("%d ",p->lista_preferencia[i]);
    }
    printf("\n");
    printf("Conjuge: %d\n",p->conjuge);
    printf("Ultimo pretedente: %d\n",p->ultimo_pretendente);    
}

int retorna_pretendente(Pessoa* p){
    
   if( p == NULL){        
            return -1;
        }else{            
            (p->ultimo_pretendente)++;
            p->ultimo_pretendente = p->ultimo_pretendente % p->tam_lista_pref;
            return(p->lista_preferencia[p->ultimo_pretendente]);
        }
        return -1;
    }      

int grau_de_preferencia(Pessoa* p, int id_pretedente){
    
    int i = 0;
    if(p == NULL){
        return -1;
    }
    while(i < p->tam_lista_pref){
        if(p->lista_preferencia[i] == id_pretedente){
            return i;
        }
        i++;
    }
    return -1;
}